package Fisica.Deposito;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import Fisica.Conexion;
import Logica.Cooperativa.Articulo;
import Logica.Cooperativa.Deposito;
import Logica.Cooperativa.Pedido;
import Logica.Cooperativa.Recepcion;

public class FisicaFactura {
	/*
	 * INSERT:
		INSERT INTO fac_recepcion_capturador (fecha,proveedor_padron,nota_pedido,art_codigo,art_barras,art_descripcion,art_cantidad,operador,numero_factura,actualizado,fecha_factura,colector,comprobante_tipo,punto_venta) 
		VALUES ('2014/08/22', 4436, 1000, 14466, 7794000597600, 'CALDO KNORR', 10, 3, 3322554466, 'N', '2014/08/22', 0, 12, 00001);
		
		UPDATE: 
		UPDATE fac_recepcion_capturador SET art_cantidad = (art_cantidad + 6), fecha = '2014/09/27' WHERE art_codigo = 14466;
		
		*/
	
	public String INSERTARTICULO; 
	public String UPDATEARTICULO;
	
	public static ResultSet rs;
	public static PreparedStatement st;
	public static Connection con;
	
	
	public static void close(ResultSet rs, PreparedStatement st, Connection con)
	{
	    if (rs!=null)
	    {
	        try
	        {   rs.close();
	        }catch(SQLException e)
	        { 	e.printStackTrace();
	        }
	    }
	    if (st != null)
	    {
	        try
	        {   st.close();
	        } catch (SQLException e)
	        {  	e.printStackTrace();
	        }
	    }
	    if (con != null)
	    {
	        try
	        {con.close();
	        } catch (SQLException e)
	        {	e.printStackTrace();
	        }
	    }
	}
	
	public static List<Deposito> lisDeposito (){
		@SuppressWarnings({ "unchecked", "rawtypes" })
		List<Deposito> lista = new ArrayList();	
		Deposito d1, d2;
		d1 = new Deposito(0, "Minorista");
		d2 = new Deposito(1, "Mayorista");
		lista.add(d1);
		lista.add(d2);		
		return lista;		
	}
	
	
	public static void insertarRecepcion(Recepcion a){
		String SELECT = "select * from fac_recepcion_capturador where proveedor_padron = "+a.getPadronCodigo()+" and art_barras = "+a.getCodBarra()+" and numero_factura = "+a.getNumeroFactura()+" and colector = "+a.getColector()+";";
		
		/*INSERT INTO fac_recepcion_capturador (fecha,proveedor_padron,nota_pedido,art_codigo,art_barras,art_descripcion,art_cantidad,operador,numero_factura,actualizado,fecha_factura,colector,comprobante_tipo,punto_venta) 
		VALUES ('2014/08/22', 4436, 1000, 14466, 7794000597600, 'CALDO KNORR', 10, 3, 3322554466, 'N', '2014/08/22', 0, 12, 00001);*/
		String INSERTAR = "INSERT INTO fac_recepcion_capturador "
	+ "(fecha,proveedor_padron,nota_pedido,art_codigo,art_barras,art_descripcion,art_cantidad,operador,numero_factura,actualizado,fecha_factura,colector,comprobante_tipo,punto_venta) "
	+ "VALUES ('"+a.getFecha()+"', "+a.getPadronCodigo()+", "+a.getNotaPedido()+", "+a.getCodigoInterno()+", "+a.getCodBarra()+", '"+a.getDescripcion()+"', "+a.getCompra()+", '"+a.getOperadorCodigo()+"', "+a.getNumeroFactura()+", '"+a.getActualzado()+"', '"+a.getFechaFactura()+"', "+a.getColector()+", "+a.getComprobanteTipo()+", "+a.getPtoVenta()+");";
		
		/*UPDATE fac_recepcion_capturador SET art_cantidad = (art_cantidad + 6), fecha = '2014/09/27' WHERE art_codigo = 14466;*/
		String UPDATE = "UPDATE fac_recepcion_capturador SET art_cantidad = (art_cantidad + "+a.getCompra()+"), fecha = '"+a.getFecha()+"' "
				+ "WHERE proveedor_padron = "+a.getPadronCodigo()+" and numero_factura = "+a.getNumeroFactura()+" "
				+ "and art_barras = "+a.getCodBarra()+" and colector = "+a.getColector()+";";
		try {
			System.out.println("cod Interno: "+a.getCodigoInterno());
			System.out.println("descripcion: "+a.getDescripcion());
			System.out.println("compra: "+a.getCompra());
			System.out.println("deposito: "+a.getColector());
			System.out.println("usuario: "+a.getOperadorCodigo());
			
			con = Conexion.getConexion();
			PreparedStatement stSelect = con.prepareStatement(SELECT);	
			ResultSet rsSelect = stSelect.executeQuery();		
			
			boolean existencia =  rsSelect.next();			 

			if (!existencia){
				st = con.prepareStatement(INSERTAR);	
				st.executeUpdate();	
				System.out.println("inserto: "+a.getDescripcion());
			}else{
				st = con.prepareStatement(UPDATE);	
				st.executeUpdate();	
				System.out.println("actualizo: "+a.getDescripcion());
				
			}
			close(null, st, null);
			close(rsSelect, stSelect, con);			
			
		}catch(Exception e){
			System.out.println("exception al intentar insertar: "+a.getDescripcion());
			e.printStackTrace();
		}
			
	}
	
	public static Recepcion buscaArtCargado(String barra){
		String SELECT = "select * from fac_recepcion_capturador where art_barras = "+barra+";";
		
		
		try {
			con = Conexion.getConexion();
			st = con.prepareStatement(SELECT);	
			rs = st.executeQuery();		
			
			boolean existencia =  rs.next();
			
			Recepcion a = new Recepcion();
			if (existencia){				
				a.setCodBarra(rs.getString("art_barras"));
				a.setCodigoInterno(rs.getString("art_codigo"));
				a.setDescripcion(rs.getString("art_descripcion"));				
			}
			
			close(rs, st, con);
			return a;
		}catch(Exception e){			
			e.printStackTrace();
		}
		return null;
			
	}
	
	public static List<Pedido> listarNotasPedido(int padron_proveedor){
		List<Pedido> lista = new ArrayList();	
		
		String sql = "select n_codigo, n_proveedor, count(*)"
				+ " from fac_nota_pedido";
		if (padron_proveedor != -1){
			sql += " where n_proveedor = "+padron_proveedor; 
		}
		 
		sql += " group by n_codigo, n_proveedor order by n_codigo asc;";
		
		try {
			con = Conexion.getConexion();
			st = con.prepareStatement(sql);	
			rs = st.executeQuery();			
						
			Pedido p;
			while (rs.next()){
				p = new Pedido();
				p.setNotaPedido(rs.getInt("n_codigo"));
				p.setProveedorPadron(rs.getInt("n_proveedor"));
				p.setCantidadPedida(rs.getInt(3));
				
				lista.add(p);				
			}
			close(rs, st, con);
			return lista;
			
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		}
		return lista;		
	}
	
	

	public static void main(String[] args) {
		FisicaFactura p = new FisicaFactura();
//		p.lisOperador();


	}

}
